1 Set up

1.1 Load packages

# install.packages("behaviouR")  # package ‘behaviouR’ is not available (for R version 4.0.2)
# library(behaviouR)

# not sure if these are needed
#library(ggfortify)
library(ggplot2)

# install.packages("tuneR")
library(tuneR) # Warning: package ‘tuneR’ was built under R version 4.0.5
## Warning: package 'tuneR' was built under R version 4.0.5
# install.packages("seewave")
library(seewave) # Warning: package ‘seewave’ was built under R version 4.0.5
## Warning: package 'seewave' was built under R version 4.0.5

1.2 Folder directory

folder <- getwd()

1.2.1 Create sub-directory

if not already existing

dir.create(file.path("recordings"), showWarnings = FALSE)
dir.create(file.path("data"), showWarnings = FALSE)
dir.create(file.path("output"), showWarnings = FALSE)

1.2.2 List files from another hard drive volume

copy relevant files to data folder

file_list <- Sys.glob('/Volumes/MyPassportForMac/Pictures/!!Nikon-Camera/Nikon-Coolpix-GPS/TestFolder-R-Map-Images/GoldstreamPark/*.wav')
file_list
## [1] "/Volumes/MyPassportForMac/Pictures/!!Nikon-Camera/Nikon-Coolpix-GPS/TestFolder-R-Map-Images/GoldstreamPark/2022-02-23-GoldstreamPark-birdsong-AmericanDipper-DSCN0073-mp4.wav"   
## [2] "/Volumes/MyPassportForMac/Pictures/!!Nikon-Camera/Nikon-Coolpix-GPS/TestFolder-R-Map-Images/GoldstreamPark/2022-02-23-GoldstreamPark-birdsong-PacificWren-chips-DSCN0171-mp4.wav"
## [3] "/Volumes/MyPassportForMac/Pictures/!!Nikon-Camera/Nikon-Coolpix-GPS/TestFolder-R-Map-Images/GoldstreamPark/DSCN1493-Dark-eyedJunco-2022-03-19-MtFinlayson.mp4.wav"
wav_files <- list.files("./recordings", pattern = "*.wav")
wav_files
##  [1] "2021-06-04-Eagle-EsquimaltLagoon-DSCN7446.MP4.wav"       
##  [2] "Anna's Hummingbird-69-2021-04-28-amplify.wav"            
##  [3] "BaldEagle-BirdNet-EsqLagoon-2022-01-04.wav"              
##  [4] "BaldEagle-BirdNet-EsqLagoon-2022-02-03-1504-1.wav"       
##  [5] "DownyWoodpecker-GorgeHarriet-2021-04-1219.wav"           
##  [6] "DSCN4571-SeymourHill-WhiteCrownedSparrowSong.wav"        
##  [7] "DSCN5017-esqlagoon-birdsong-White-crownedSparrow.wav"    
##  [8] "DSCN6126-4-SongSparrow-HarrietSt.wav"                    
##  [9] "DSCN7446.MP4-BaldEagle-EsquimaltLagoon-2021-06-03.wav"   
## [10] "DSCN7583-Robin-Singing-FromRooftop.wav"                  
## [11] "Golden-crowned Sparrow.wav"                              
## [12] "Golden-crownedSparrow-GorgeHarriet-2021-04-06-152652.wav"
## [13] "PacificWren-BeaconHillPark-2021-03-31.wav"               
## [14] "PacificWren-BowkerCreek-2021-09-23.wav"                  
## [15] "PacificWren-Goldstream-2021-04-08-142748.wav"            
## [16] "Ruby-crownedKinglet-UVic-2021-04-08-101007.wav"          
## [17] "White-crownedSparrow-GorgeHarriet-2021-04-17-1357.wav"

2 Read wav file with tuneR

eagle_wav_2021_06_04 <- readWave("./recordings/2021-06-04-Eagle-EsquimaltLagoon-DSCN7446.MP4.wav")

2.1 Save wav file object in recordings folder

# save(eagle_wav_2021_06_04, file = "./data/eagle_wav_2021_06_04")

2.2 Run wave object

to see info

eagle_wav_2021_06_04
## 
## Wave Object
##  Number of Samples:      798208
##  Duration (seconds):     16.63
##  Samplingrate (Hertz):   48000
##  Channels (Mono/Stereo): Stereo
##  PCM (integer format):   FALSE
##  Bit (8/16/24/32/64):    32

2.2.1 Wave duration

using seewave

duration(eagle_wav_2021_06_04)
## [1] 16.62933

3 Plots

3.1 Plot waveform

using seewave

oscillo(eagle_wav_2021_06_04)

3.1.1 Plot waveform zoomed to see shape

using seewave

oscillo(eagle_wav_2021_06_04, from = 0, to = 2)

oscillo(eagle_wav_2021_06_04, from = 0.1, to = 0.2)

3.2 Plot Spectrogram

can’t use behaviouR >> is not available (for R version 4.0.2)
behaviouR::Spectrogram(sound.file = “./recordings/2021-06-04-Eagle-EsquimaltLagoon-DSCN7446.MP4.wav”)

spectro_eagle_wav_2021_06_04 <- spectro(eagle_wav_2021_06_04)

spectro_eagle_wav_2021_06_04_zoom <- spectro(eagle_wav_2021_06_04, flim=c(0,6)) # zoom in frequency

spectro_eagle_wav_2021_06_04_osc <- spectro(eagle_wav_2021_06_04, osc = TRUE)

spectro_eagle_wav_2021_06_04_zoom_osc <- spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6)) # zoom in frequency

# spectro(eagle_wav_2021_06_04)  # Registered S3 method overwritten by 'htmlwidgets'

3.3 Change palette

Palettes available: reverse.gray.colors.1, reverse.gray.colors.2, reverse.heat.colors, reverse.terrain.colors, reverse.topo.colors, reverse.cm.colors heat.colors, terrain.colors, topo.colors, cm.colors

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6))

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = reverse.terrain.colors)

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = terrain.colors)  # I like this one best

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = reverse.gray.colors.1)

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = reverse.gray.colors.2)

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = reverse.heat.colors)

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = heat.colors)

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = reverse.topo.colors)

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = topo.colors)

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = reverse.cm.colors)

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = reverse.cm.colors, colwave="orchid1")

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = cm.colors, colwave="orchid1")

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = temp.colors) # I like this one

# Save image

jpeg(file = "./output/eagle_wav_2021_06_04_spector.jpeg")
spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = terrain.colors, colbg = "black", colgrid="white", colwave="white", colaxis="white", collab="white") # I like this best
dev.off
## function (which = dev.cur()) 
## {
##     if (which == 1) 
##         stop("cannot shut down device 1 (the null device)")
##     .External(C_devoff, as.integer(which))
##     dev.cur()
## }
## <bytecode: 0x7fc689fba9f8>
## <environment: namespace:grDevices>
png(file="./output/eagle_wav_2021_06_04_spector.png")
spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = terrain.colors, colbg = "black", colgrid="white", colwave="white", colaxis="white", collab="white") # I like this best
dev.off
## function (which = dev.cur()) 
## {
##     if (which == 1) 
##         stop("cannot shut down device 1 (the null device)")
##     .External(C_devoff, as.integer(which))
##     dev.cur()
## }
## <bytecode: 0x7fc689fba9f8>
## <environment: namespace:grDevices>
tiff(file="./output/eagle_wav_2021_06_04_spector.tiff", units="in", width=8, height=8, res=600)
spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = terrain.colors, colbg = "black", colgrid="white", colwave="white", colaxis="white", collab="white") # I like this best
dev.off
## function (which = dev.cur()) 
## {
##     if (which == 1) 
##         stop("cannot shut down device 1 (the null device)")
##     .External(C_devoff, as.integer(which))
##     dev.cur()
## }
## <bytecode: 0x7fc689fba9f8>
## <environment: namespace:grDevices>

3.4 Change plot colours

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6))

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = terrain.colors)
spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = terrain.colors, colbg = "black")

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = terrain.colors, colbg = "black", colwav = "yellow")

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = terrain.colors, colbg = "black", colwav = "green")

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = terrain.colors, colbg = "black", colwav = "palegreen")

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = terrain.colors, colbg = "black", colwav = "lightgreen")

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = terrain.colors, colbg = "black", colwav = "springgreen")

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = terrain.colors, colbg = "black", colwav = "limegreen") # I like this best

spectro(eagle_wav_2021_06_04, osc = TRUE, flim=c(0,6), palette = terrain.colors, colbg = "black", colgrid="white", colwave="white", colaxis="white", collab="white") # I like this best

4 ggplot2

# library(ggplot2)

## first layer
# v <- ggspectro(eagle_wav_2021_06_04, ovlp = 50)
v <- ggspectro(eagle_wav_2021_06_04)

## using geom_tile ##
v + geom_tile(aes(fill = amplitude)) + ylim(0, 6)
## Warning: Removed 297769 rows containing missing values (geom_tile).

# black and white theme background
v + geom_tile(aes(fill = amplitude)) + 
  ylim(0, 6) + 
  scale_fill_gradientn(name="Amplitude\n(dB)\n", limits=c(-30,0),
  na.value="transparent", colours = spectro.colors(30)) +
  theme_bw()
## Scale for 'fill' is already present. Adding another scale for 'fill', which
## will replace the existing scale.
## Warning: Removed 297769 rows containing missing values (geom_tile).

v + geom_tile(aes(fill = amplitude)) + 
  ylim(0, 6) + 
  scale_fill_gradientn(name="Amplitude\n(dB)\n", limits=c(-30,0),
  na.value="transparent", colours = spectro.colors(30)) +
  theme(plot.background = element_rect(fill = 'white', colour = 'red'),
        panel.background = element_rect(fill = 'black', colour = 'red'))
## Scale for 'fill' is already present. Adding another scale for 'fill', which
## will replace the existing scale.
## Warning: Removed 297769 rows containing missing values (geom_tile).



4.1

5 NOT WORKING

5.1 Play using tuneR

5.2 Playlist of sound files

# playlist("./recordings/")

5.2.1 Set Player

# player <- setWavPlayer("/Applications/VLC")

5.2.2 Play

DON“T USE QUICKTIME >>> locks up R ,”/Applications/‘QuickTime Player.app’/Contents/MacOS/‘QuickTime Player’"

# play("./recordings/2021-06-04-Eagle-EsquimaltLagoon-DSCN7446.MP4.wav")

5.3


5.4


5.5 Load recordings

not tested / working yet

#recordings <- get(load(url()))

5.6